#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
#include <SoftwareSerial.h> //库文件
#include "DHT.h" //调用温湿度传感器的库文件
//DHT11
#define D A3 //定义传感器引脚位DHT dht(D, DHT11); //设置读取结果变量dht
DHT dht(D,DHT11); //初始化变量
int h=0;
int t=0;
//电量
int dl=0;
int dlz=0;
//蓝牙
SoftwareSerial BT(5, 4); //设置蓝牙与板子的连接端口。 pin 5 接蓝牙的 TXD pin 4 接蓝牙的 RXD
char X; //定义一个字符变量存数据。
//水位
int sw=0;
int swz=0;
//舵机
Servo dj;
//光敏
int gm=0;
//土壤
int tr=0;
int trz=0;
//温湿度
int wsd=0;
//OLED
Adafruit_SSD1306 OLED(128, 64, &Wire, -1);
int a=1;
void setup() {
  // 灯光
  pinMode(6,OUTPUT);
  pinMode(9,OUTPUT);
  //舵机初始化
  Serial.begin(9600);
  dj.attach(11,500,2500);
  //蓝牙初始化
  BT.begin(9600); //蓝牙通信速率，默认一般为 9600
  //蜂鸣器
  digitalWrite(9,LOW);
  //水泵
  pinMode(7, OUTPUT);//数字口7设置为输出
  pinMode(8, OUTPUT);//数字口6设置为输出
  //oled初始化
  OLED.begin(SSD1306_SWITCHCAPVCC,0x3C);
  OLED.setTextSize(2);
  //OLED.setTextWrap(true);自动换行
  //drawBitmap(x,y,bitmap,w,h,c);图像显示
  OLED.setTextColor(1);
  OLED.setCursor(0,0);
}

void loop() {
  // put your main code here, to run repeatedly:
  dj.write(5);
  //电量
  dl=analogRead(21);
  dlz=(float)dl/1024*3.3*11;
  //湿度
  h = dht.readHumidity(); //读dht湿度
  //温度
  t = dht.readTemperature(); //读dht温度(摄氏度)
  //光照强度
  gm=analogRead(16);
  //水位高度
  sw=analogRead(A1);swz=sw-250;
  //土壤湿度
  tr=analogRead(20);trz=map(tr,0,1024,0,300);
  if(gm<=100)
  {
    analogWrite(6,0);
    dj.write(90);
    delay(50);
  }
  else if(gm>=300)
  {
    analogWrite(6,120);
    dj.write(175);
    delay(50);
  }
  if(swz>=80)
  {
    digitalWrite(9,HIGH);
    BT.write("没水了");
    delay(50);
  }
  else
  {
    digitalWrite(9,LOW);
    delay(50);
  }
  if(tr<=20)
  {
    digitalWrite(7,HIGH);
    digitalWrite(8,LOW);
    delay(1000);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
  }
  else 
  {
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    delay(50);
  }
  if (BT.available()) //检测：【蓝牙】如果数据写入，则执行。
  {
    X = BT.read(); //把检测到的数据给到自定义变量 X
    if(X=='a')
    {
    digitalWrite(6,HIGH);
    }
    else if(X=='b')
    {
    digitalWrite(6,LOW);
    }
    else if(X=='c')
    {
    digitalWrite(7,HIGH);
    digitalWrite(8,LOW);
    delay(1000);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    }
    else if(X=='t')
    {
      BT.print("% Temperature:"); //温度
      BT.print(t); //读取温度值
      BT.println("℃"); //温度单位
    }
    else if(X=='h')
    {
      BT.print("Humidity:"); //湿度
      BT.print(h); //读取湿度值
    }
    else if(X=='D')
    {
      BT.print(dlz);
    }
    else if(X=='e')
    {
      dj.write(90);
      delay(50);
    }
    else if(X=='f')
    {
      dj.write(5);
      delay(50);
    }
  }
  OLED.setCursor(0,10);
  OLED.print("LIGHT=");
  OLED.print(gm);
  OLED.setCursor(0,30);
  OLED.print("SOIL=");
  OLED.print(tr);
  OLED.setCursor(0,50);
  OLED.print("t=");
  OLED.print(t);
  OLED.setCursor(65,50);
  OLED.print("h=");
  OLED.print(h);
  OLED.display();
  delay(10);
  OLED.clearDisplay();
  delay(100);
}